home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 11 / Mac Magazin and MacEasy Magazine CD - Issue 11.iso / Sharewarebibliothek / Entwickler / appe Windows 2.0 / prefs.c < prev    next >
Text File  |  1995-07-04  |  3KB  |  86 lines

  1. // File "prefs.c" - 
  2.  
  3. #include <Folders.h>
  4.  
  5. #include "prefs.h"
  6.  
  7. // * **************************************************************************** * //
  8. // * **************************************************************************** * //
  9.  
  10. Handle GetPrefs(long type, short version) {
  11.     short prefsRefNum, saveRefNum;
  12.     Handle rsrc, pref=0;
  13.     
  14.     saveRefNum = CurResFile();
  15.     if ((prefsRefNum = OpenPrefsFile()) == -1) return(0);
  16.     
  17.     if (! (rsrc = Get1Resource(type, version))) goto GET_PREFS_ERROR;
  18.     if (! (pref = NewHandle(GetHandleSize(rsrc)))) goto GET_PREFS_ERROR;
  19.     BlockMove(*rsrc, *pref, GetHandleSize(rsrc));
  20.  
  21.     ReleaseResource(rsrc);
  22.     
  23. GET_PREFS_ERROR:
  24.     CloseResFile(prefsRefNum);
  25.     UseResFile(saveRefNum);
  26.     return(pref);
  27.     }
  28.  
  29. // * **************************************************************************** * //
  30. // * **************************************************************************** * //
  31.  
  32. void WritePrefs(Handle pref, long type, short version) {
  33.     short prefsRefNum, saveRefNum;
  34.     Handle rsrc, oldRsrc;
  35.     
  36.     saveRefNum = CurResFile();
  37.     if ((prefsRefNum = OpenPrefsFile()) == -1) return;
  38.     
  39.     if (rsrc = Get1Resource(type, version)) RmveResource(rsrc);
  40.     
  41.     if (pref) {
  42.         if (! (rsrc = NewHandle(GetHandleSize(pref)))) goto WRITE_PREFS_ERROR;
  43.         BlockMove(*pref, *rsrc, GetHandleSize(pref));
  44.     
  45.         AddResource(rsrc, type, version, "\p");
  46.         if (ResError()) goto WRITE_PREFS_ERROR;
  47.         WriteResource(rsrc);
  48.         }
  49.     
  50. WRITE_PREFS_ERROR:
  51.     CloseResFile(prefsRefNum);
  52.     UseResFile(saveRefNum);
  53.     }
  54.  
  55. // * **************************************************************************** * //
  56. // * **************************************************************************** * //
  57.  
  58. short OpenPrefsFile() {
  59.     short err=0, prefsRefNum;
  60.     FSSpec prefsFile;
  61.     
  62.     if (err = FindFolder(kOnSystemDisk, kPreferencesFolderType, -1,
  63.             &prefsFile.vRefNum, &prefsFile.parID)) return(-1);
  64.     BlockMove(kPrefsFileName, prefsFile.name, sizeof(prefsFile.name));
  65.         
  66.     prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
  67.     if (err = ResError()) {
  68.         if ((err != fnfErr) && (err = FSpDelete(&prefsFile))) return(-1);
  69.         if (err = CreatePrefsFile(&prefsFile)) return(-1);
  70.           prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
  71.           }
  72.     if (ResError() == fnfErr) return(-1);
  73.     UseResFile(prefsRefNum);
  74.     return(prefsRefNum);
  75.     }
  76.  
  77. // * **************************************************************************** * //
  78. // * **************************************************************************** * //
  79.  
  80. short CreatePrefsFile(FSSpecPtr prefsFile) {
  81.     short err=0;
  82.     
  83.     FSpCreateResFile(prefsFile, kCreatorType, kPrefsFileType, 0);
  84.     return(err = ResError());
  85.     }
  86.